package br.ufrj.neg.reuniao.servlet;

import java.io.IOException;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.velocity.tools.view.VelocityViewServlet;

import br.ufrj.neg.bean.Idioma;
import br.ufrj.neg.constants.General;
import br.ufrj.neg.reuniao.bean.ArtefatoBean;
import br.ufrj.neg.reuniao.bean.EncaminhamentoBean;
import br.ufrj.neg.reuniao.bean.ParticipanteBean;
import br.ufrj.neg.reuniao.bean.ReuniaoBean;
import br.ufrj.neg.reuniao.model.ArtefatoModel;
import br.ufrj.neg.reuniao.model.EncaminhamentoModel;
import br.ufrj.neg.reuniao.model.ParticipanteModel;
import br.ufrj.neg.reuniao.model.ReuniaoModel;
import br.ufrj.neg.util.Data;

public class SalvarReuniaoAction extends VelocityViewServlet {

	private static final long serialVersionUID = -1502095409248120929L;

	// private static Logger log = Logger.getLogger("rootLogger");

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws IOException, ServletException {
		
		Idioma idioma = (Idioma) request.getAttribute("idioma");
		ReuniaoModel rm = new ReuniaoModel();
		EncaminhamentoBean eb = new EncaminhamentoBean();
		EncaminhamentoModel em = new EncaminhamentoModel();
		ReuniaoBean rb = new ReuniaoBean();
		
		request.setCharacterEncoding("utf-8");

		try {
			/*
			 * Pega a sessao
			 */
			HttpSession session = request.getSession(false);

			/*
			 * Pega os parametros passados
			 */
			int idReuniao = 0;
			if(request.getParameter("idReuniao") != null){
				idReuniao = Integer.parseInt(request.getParameter("idReuniao"));
			}
			synchronized(session){
				rb = (ReuniaoBean) session.getAttribute("ReuniaoBean");
			}
			 
			int idNegociacao = Integer.parseInt(request
					.getParameter("idNegocio"));
			
			String descricao = request.getParameter("descricaoReuniao");
			String local = request.getParameter("localReuniao");
			String data = request.getParameter("dataReuniao");
			String hora = request.getParameter("horaReuniao");
			int tipoReuniao = Integer.parseInt(General.getParameterUTF8(request, "tipoReuniao"));
			String encaminhamentoDescricao = General.getParameterUTF8(request, "encaminhamentoReuniao");
			int idEncaminhamento = 0;
			try {
				idEncaminhamento = Integer.parseInt(General.getParameterUTF8(request, "idEncaminhamento"));
			} catch (Exception e) {

				// TODO: handle exception
			}

			rb.setData(new Data(data, hora));
			rb.setDescricao(descricao);
			rb.setId(idReuniao);
			rb.setIdNegociacao(idNegociacao);
			rb.setLocal(local);
			rb.setTipoReuniao(tipoReuniao);

			if(idReuniao == 0)
				idReuniao = rm.cadastraReuniao(rb);
			
			else 
				rm.atualizaReuniao(rb);
			
			
			eb.setDescricao(encaminhamentoDescricao);
			eb.setIdReuniao(idReuniao);
			eb.setId(idEncaminhamento);
			
			if (eb.getId() == 0)
				em.adicionarEncaminhamento(eb);
			else
				em.atualizaEncaminhamento(eb);
			
			
			ArrayList<Integer> artefatos = new ArrayList<Integer>();
			for(ArtefatoBean artefato : rb.getArtefatos()){
				artefatos.add(new Integer(artefato.getId()));
			}
			ArtefatoModel am = new ArtefatoModel();
			
			ArtefatoBean aB = new ArtefatoBean(idioma);
			aB.setReuniao(rb.getId());
			am.removeArtefatoExcluidosPorReuniao(aB, artefatos);
			
			for(ArtefatoBean artefato : rb.getArtefatos()){
				if(artefato.getId() == 0){
					artefato.setReuniao(idReuniao);
					am.cadastraArtefato(artefato);
				}
			}
			
			
			ArrayList<Integer> participantes = new ArrayList<Integer>();
			for(ParticipanteBean participante : rb.getParticipantes()){
				participantes.add(new Integer(participante.getId()));
			}
			ParticipanteModel pm = new ParticipanteModel();
			pm.removeParticipantesExcluidosPorReuniao(idReuniao, participantes);
			
			for(ParticipanteBean participante : rb.getParticipantes()){
				participante.setIdReuniao(idReuniao);
				if(participante.getId() == 0){
					pm.cadastraParticipanteReuniao(participante);
				}
				else{
					pm.atualizaParticipanteReuniao(participante);
				}
			}

			request.getRequestDispatcher("reuniao.listar").forward(request, response);

		} catch (Exception e) {
			System.out.println(e);
			request.getRequestDispatcher(General.TELA_ERRO_500).forward(request,
					response);
		}
	}

}
